﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;
using Sio.Mdm.Entities;
using Sio.Mdm.BF.Ldap;
using Sio.Mdm.Types.Database;

namespace Sio.Mdm.Web.Instalacija
{
    public partial class LdapSkupineSeznam : Controls.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            NaloziSeznamGrida();
        }
        
        private void NaloziSeznamGrida()
        {            
            GridSkupineSeznam.LoadData<LdapSkupinaStoritev>(
                new Filter<LdapSkupinaStoritev>().Where(r => r.SkupinaID != null).OrderBy(r => r.SkupinaNaziv));
        }

        #region OdstraniZapise
        protected void OdstraniZapise(object sender, DirectEventArgs e)
        {
            List<int> deletedItems = e.GetIdList<int>("selected", "SkupinaID");
            List<string> selectedItemsNames = e.GetIdList<string>("selected", "SkupinaNaziv");
            string msg = "";
            int deleted = 0;

            for (var i = 0; i < deletedItems.Count; i++)
            {
                //(1) CHECK
                var clani = new EntityCollection<SkupinaEntitete>(new Filter<SkupinaEntitete>(deletedItems[i]));
                if (clani.Count > 0) {
                    ShowExtMessageBox("Opozorilo", String.Format("Skupine '{0}' ni mogoče izbrisati, ker je v uporabi. <br><br>Število članov v skupini: {1}.", selectedItemsNames[i], clani.Count));
                    return;
                }

                //(2) CHECK 2
                EntityCollection<Skupina> skupinaChild = new EntityCollection<Skupina>(
                    new Filter<Skupina>().Where(r => r.SkupinaParentId == deletedItems[i]));
                if (skupinaChild.Count > 0) {
                    ShowExtMessageBox("Opozorilo", String.Format("Skupine '{0}' ni mogoče izbrisati, ker je v uporabi. <br><br>Število podrejenih skupin: {1}.", selectedItemsNames[i], skupinaChild.Count));
                    return;
                }

                EntityCollection<SkupinaStoritevRazsirjeno> skupine = new EntityCollection<SkupinaStoritevRazsirjeno>(
                    new Filter<SkupinaStoritevRazsirjeno>().Where(r => r.SkupinaID == deletedItems[i]));

                skupine.RemoveAll();
                skupine.Update();

                deleted++;                
            }

            if (deleted > 0)
            {
                StoreSkupineSeznam.DataBind();
                ShowExtNotification("Brisanje", String.Format("Brisanje je bilo uspešno. <br><br>Število izbrisanih zapisov: {0}.", deleted));
            }

        }
        #endregion

        #region PreveriPripadnost
        protected void PreveriPripadnost(object sender, DirectEventArgs e)
        {
            List<int> selectedItems = e.GetIdList<int>("selected", "SkupinaID");
            List<string> selectedItemsNames = e.GetIdList<string>("selected", "SkupinaNaziv");
            string msg = "";

            for (var i = 0; i < selectedItems.Count; i++)
            {                
                var clani = new EntityCollection<SkupinaEntitete>(new Filter<SkupinaEntitete>(selectedItems[i]));
                msg = String.Format("{0}{1}: {2} <br>", msg, selectedItemsNames[i], clani.Count());                   
            }

            if (!String.IsNullOrEmpty(msg)) {
                msg = string.Format("<b>Članstvo v izbranih skupinah je naslednje:</b><br><br>{0}", msg);
                ShowExtMessageBox("Pripadnost", msg);
            }                                
        }
        #endregion
    }
}
